package main

import (
  "common/config"
  "common/metric"
  "context"
  "flag"
  "fmt"
  "user/app"
)

/*
  传递指针*string而不是直接传递string，通常是为了：
  节省内存：传指针比传递较大的值更高效。
  可变性：如果需要在InitConfig外部修改configFile的值，传递指针是必要的，因为函数可以通过指针修改实际值。
*/
var configFile = flag.String("config", "application.yaml", "config file")

func main() {
  flag.Parse()
  config.InitConfig(configFile)
  go func() {
    metric.Serve(fmt.Sprintf("0.0.0.0:%d", config.Conf.MetricPort))
  }()

  err := app.Run(context.Background())
  if err != nil {
    panic("run app error\n")
  }

  // 不让进程停止
  select {}
}
